package banksimulator.ui;

import banksimulator.bank.AbstractAccount;
import banksimulator.bank.BankChangeEvent;
import banksimulator.bank.BankChangeListener;
import banksimulator.bank.AbstractBank;
import javax.swing.DefaultListModel;

/**
 * 一个AbstractListModel的实现，用来显示某个银行内的所有帐户ID。
 * <p>当银行进行了添加或删除帐户的操作时，显示内容会自动刷新。
 * <p>通过此Model，可以使用下列代码方便的显示某个银行内的所有帐户ID：
 * <pre>JList lst = new JList(new BankListModel(bank));</pre>
 * 其中bank为AbstractBank的子类的某一具体实例。
 * @author Rajab
 */
class BankListModel extends DefaultListModel {

    private AbstractBank bank;
    //   private String[] names;

    public BankListModel(AbstractBank bank) {
        this.bank = bank;

        for (AbstractAccount ac : bank) {
            addElement(ac.getAccountID());
        }

        bank.addBankChangeListener(new BankChangeListener() {

            public void bankChanged(BankChangeEvent evt) {
                //System.out.println(evt);
                switch (evt.getType()) {
                    case ADD:
                        addElement(evt.getAccountID());
                        break;
                    case REMOVE:
                        removeElement(evt.getAccountID());
                        break;
                }
            }
        });

    }
}
